﻿using System.Collections.Generic;

namespace GxFramework
{
    /// <summary>
    /// 实体，注册管理与之相关的数据组件，可以认为是个数据（组件）集合体。
    /// 同时提供事件派发，中转与实体相关的事件。
    /// </summary>
    public class Entity
    {
        Dictionary<int, IComponent> _componentMap = new Dictionary<int, IComponent>();
        public bool AddComponent(IComponent component)
        {
            IComponent item;
            if (_componentMap.TryGetValue(component.componentID, out item))
                return false;
            _componentMap[component.componentID] = component;
            component.SetEntity(this);
            component.OnAttach(this);
            return true;
        }
        public bool RemoveComponent(int componentID)
        {
            IComponent item;
            if (!_componentMap.TryGetValue(componentID, out item))
                return false;
            _componentMap.Remove(componentID);
            item.SetEntity(null);
            item.OnDetach(this);
            return true;
        }
        public IComponent GetComponent(int componentID)
        {
            IComponent item;
            _componentMap.TryGetValue(componentID, out item);
            return item;
        }
    }
}
